import java.io.File;
import java.net.UnknownHostException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.util.HashMap;
import java.util.Iterator;
/**
*
* Classe de um cliente2 exemplo
* Comentários na classe Cliente
*/
public class Cliente2 {
    
    private HashMap<String,ArquivoLocal> listaArquivosLocal;
    private Service servidor;
    
    public static void main(String[] args) throws UnknownHostException, RemoteException {
        Cliente2 cliente = new Cliente2("/tmp/cliente1/");
        for (Iterator<ArquivoLocal> it = cliente.listaArquivosLocal.values().iterator(); it.hasNext();) {
            ArquivoLocal arquivo = it.next();
            System.out.println(arquivo.getNome());
            System.out.println(arquivo.getCliente_owner_ip());
            cliente.servidor.compartilharArquivo(arquivo);
        }
        System.out.println("Versao do Cliente.java: "+cliente.servidor.verificarVersaoArquivo("Cliente.java"));
    }
    
    public Cliente2(String caminho) throws UnknownHostException {
        // Verificar o retorno do IP para cada cliente
        java.net.InetAddress i = java.net.InetAddress.getLocalHost();
        String ip = i.getHostAddress();
        this.listaArquivosLocal = new HashMap<String, ArquivoLocal>();
        File diretorio = new File(caminho);
        if( diretorio.exists() ){
            if(diretorio.isFile()){
                System.out.printf("Diretório invalido\n");
            } else {
                String[] arquivos = diretorio.list();
                for( String arquivo : arquivos){
                    File arquivo_list = new File(caminho+arquivo);
                    ArquivoLocal arquivolocal = new ArquivoLocal(arquivo_list.getName(),arquivo_list.lastModified(),ip, arquivo_list, true);
                    listaArquivosLocal.put(arquivo_list.getName(), arquivolocal);
                }
            }
        }
        try
        {
            this.servidor = (Service)Naming.lookup("rmi://localhost:11099/Servidor");
            for (Iterator<ArquivoLocal> it = this.servidor.obterListaArquivos().values().iterator(); it.hasNext();) {
                ArquivoLocal arquivo = it.next();
                if (!this.listaArquivosLocal.containsKey(arquivo.getNome())){
                    this.listaArquivosLocal.put(arquivo.getNome(),arquivo);
                }
            }
        } 
        catch (Exception e) {
            System.out.println(e);
        }
    }
}
